Object-orientation concepts have been applied to developing databases as well as applications programming. Object-orientation features, such as abstract data types and encapsulation, have been combined with database capabilities to provide realistic models of real world things, ideas, and events. However, a frequent complaint of those who need information from databases is that data cannot be conveniently retrieved as useful information. Object-oriented databases have the reputation of being rich in functionality but poor in performance. There is plenty of data but it is not useful. Object-oriented concepts have not adequately benefitted the end users, the knowledge workers, who need information, not raw data. Too much of the usefulness of information depends on an individual's technical skill or acquired knowledge applied to data from a database.
The basic idea of object-oriented software is the use of "objects". Objects are software entities comprising data structures and operations on the structures' data. Objects can model concrete things or abstract ideas, in terms of characteristics or in terms of behavior. A software object is a group of elements working together or in succession to perform specific tasks. These elements are data elements, also called instance variables, and functions, also called methods, of the object. Objects are defined by creating "classes", which act as templates that instruct a computer how to construct an actual object. For example, a class might specify the number and type of data variables and the steps involved in methods that manipulate the object. An object created from a certain class is called an "instance" of that class. The class defines the operations and information initially in a instance, while the current state of the instance is defined by operations subsequently performed on it. By analogy to a factory, objects are created by "asking" a class (the factory) to "stamp out" an instance.
The state of an object is represented by the values of its instance variables. The state can be retrieved or updated with accessor methods. Other methods will perform operations associated with an object and may invoke additional methods on the same or other objects.
A feature of object-oriented programming is encapsulation of objects. Encapsulation means that objects hide (encapsulate) their data's internal structure and the algorithms that implement their actions. Instead of exposing these implementation details, objects present interfaces that represent their abstractions. Other features of object-oriented programming are polymorphism and inheritance. As a result of polymorphism, the same method can manipulate objects of different classes inheritance permits classes to inherit methods and instance data from other classes